|
Программируем по-русски
|
Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку. Издатель Глагола
|
(*~\Глагол\Отделы\Поле~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*) (**) ОТДЕЛ Надел; (*============================================================================* * НАЗНАЧЕНИЕ: надел это область на экранном поле для ввода/вывода текстовых * данных. Вид Надел является основой для видимых наделов. * Также в данном отделе содержатся вспомогательные задачи для вывода * надписей с выделяемыми особым цветом буквами - буквицами. * При нажатии Альт-кода буквицы происходит переключение клавиатурного ввода * на надел, в надписи которого содержится данная буквица. *============================================================================*) ИСПОЛЬЗУЕТ Рамка, Знак ИЗ "..\Иное\", ОС ИЗ "..\Обмен\", ЦвЗнак ИЗ "..\Обмен\", Окно ИЗ "..\Обмен\", Ввод ИЗ "..\Обмен\"; ПОСТ (* надел может находится в следующих состояниях: *) сОбычный- =0; (* отображается на поле без осуществления ввода *) сВыбран- =1; (* осуществляется ввод в данный надел *) сОтключен-=2; (* выбор данного надела невозможен *) (* итого *) Состояний-=3; (* признаки поведения *) прВыбираемый-=0; (* может выбираться человеком для ввода *) прГлухой- =1; (* не воспринимает действия человека *) (* цвета ОС (место,знак), используемые для отображения наделов *) цОбычный- =70X; цБуквицы- =7EX; цОтключенный- =78X; цВыбраннойКнопки- =30X; цБуквицыВыбраннойКнопки-=3EX; цХолста- =1BX; цОтметкиХолста- =30X; цОтключенногоХолста- =18X; цСтроки- =3FX; цОтметкиСтроки- =3BX; цОтключеннойСтроки- =38X; цОтметкиСтрокиПамятки- =0FX; цПредупреждения- =4FX; цБуквицыПредупреждения- =4EX; ВИД Доступ-=ДОСТУП К Вид; Задача=ЗАДАЧА(надел:Доступ; посылка+:Ввод.Посылка); Вид-=НАБОР(Рамка.Вид) следующий- :Доступ; (* следующий надел на поле *) предыдущий- :Доступ; (* предыдущий надел на поле *) Приём- :Задача; (* приём и обработка посылок *) признаки- :МНОЖ; (* признаки (множество из пр...) *) состояние+ :ЦЕЛ; (* текущее состояние (одно из с...) *) поле+ :Рамка.Доступ; (* поле, содержащее надел *) цветНадписи+:ЦЕПЬ[Состояний]; (* цвет надписи в определённом состоянии *) цветБуквицы+:ЦЕПЬ[Состояний]; (* цвет буквицы в определённом состоянии *) КОН; Надпись-=ЦЕПЬ[64]; (* перед буквицей ставится знак "~" *) (******************************************************************************) ЗАДАЧА Очистить-(надел:Доступ); (* Заполняет надел пробелом с цветом надписи текущего состояния *) УКАЗ Окно.ЦветнойПробел(надел.вс, надел.лк, надел.нс, надел.пк, надел.цветНадписи[надел.состояние]) КОН Очистить; (******************************************************************************) ЗАДАЧА ВыводНадписи-(надел:Доступ; надпись-:Надпись; с:ЦЕЛ); (* Цель: отобразить надпись на заданной строке надела * До: <надел> - данный надел * <надпись> - цепочка отображаемых знаков * <с> - строка надела, на которую необходимо вывести надпись *) ПЕР цвСтрока:ЦвЗнак.Строка; поз,к,пко:ЦЕЛ; знак,былЗнак:ЗНАК; цвет,цНадписи,цБуквицы:ЗНАК; УКАЗ (* определим цвета *) цНадписи:=надел.цветНадписи[надел.состояние]; цБуквицы:=надел.цветБуквицы[надел.состояние]; (* начальные значения *) к:=-1; пко:=надел.пк - надел.лк; поз:=0; былЗнак:=0X; КОЛЬЦО ЕСЛИ поз >= РАЗМЕР(надпись) ТО ВЫХОД КОН; знак:=надпись[поз]; ЕСЛИ (знак = 0X) ИЛИ (к > пко) ТО ВЫХОД КОН; ЕСЛИ (былЗнак = "~") И Знак.БукваЦифра(знак) ТО цвет:=цБуквицы ИНАЧЕ цвет:=цНадписи; УВЕЛИЧИТЬ(к) КОН; ЦвЗнак.ИзЗнакаИЦвета(знак,цвет,цвСтрока[к]); былЗнак:=знак; УВЕЛИЧИТЬ(поз) КОН; Окно.ПисатьСтроку(цвСтрока,надел.вс+с,надел.лк,к+1) КОН ВыводНадписи; (******************************************************************************) ЗАДАЧА СчитатьНадпись-(цепь-:ЦЕПЬ; надпись+:Надпись; длина+,буквица+:ЦЕЛ); (* Цель: переписать <цепь> в <надпись> и найти её длину и последнюю буквицу * До: <цепь> - исходная цепочка * <надпись> - переписанная <цепь> * После: <длина> - длина отображаемых знаков * <буквица> - код для последней подсвеченной буквы *) ПЕР поз:ЦЕЛ; знак,былЗнак,буква:ЗНАК; УКАЗ буква:=0X; былЗнак:=0X; длина:=0; СПИСАТЬ(цепь,надпись); ОТ поз:=0 ДО ДЛИНА(надпись)-1 ВЫП знак:=надпись[поз]; ЕСЛИ былЗнак = "~" ТО ЕСЛИ Знак.БукваЦифра(знак) ТО УМЕНЬШИТЬ(длина); буква:=знак КОН КОН; УВЕЛИЧИТЬ(длина); былЗнак:=знак КОН; буквица:=ОС.ВинЗнакВКодКлавиши(буква) КОН СчитатьНадпись; (******************************************************************************) ЗАДАЧА Добавить-(наделы+,надел:Доступ); (* Добавить <надел> в конец двусвязанного списка <наделы> *) ПЕР следующий,предыдущий:Доступ; УКАЗ ЕСЛИ наделы = ПУСТО ТО надел.следующий:=надел; надел.предыдущий:=надел; наделы:=надел ИНАЧЕ следующий:=наделы; предыдущий:=следующий.предыдущий; предыдущий.следующий:=надел; следующий.предыдущий:=надел; надел.предыдущий:=предыдущий; надел.следующий:=следующий КОН КОН Добавить; (******************************************************************************) ЗАДАЧА Подготовить-(надел:Доступ; верх,лево,строк,колонок:ЦЕЛ; признаки:МНОЖ; Приём:Задача); УКАЗ Рамка.Подготовить(надел,верх,лево,строк,колонок); надел.признаки:=признаки; надел.Приём:=Приём; надел.цветНадписи[сОбычный] :=цОбычный; надел.цветБуквицы[сОбычный] :=цБуквицы; надел.цветНадписи[сВыбран] :=цОбычный; надел.цветБуквицы[сВыбран] :=цБуквицы; надел.цветНадписи[сОтключен]:=цОтключенный; надел.цветБуквицы[сОтключен]:=цОтключенный КОН Подготовить; КОН Надел. |
▲ Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com
|
|